export class Plugin {

}














// export const fieldPlugin = '__FIELD_PLUGIN__';
// export const resourcePlugin = '__RESOURCE_PLUGIN__';
//
// abstract class Plugin {
//
//   fieldKey = Symbol('fieldPlugin');
//   resourceKey = Symbol('resourcePlugin');
//
//   global: object;
//   default: object;
//
//   constructor(global: object = {}) {
//     this.global = {
//       ...global,
//     };
//   }
//
//   protected fieldDecorator(...args: any[]): PropertyDecorator {
//     throw new Error('Current decorator not implemented!')
//   }
//
//   protected resourceDecorator(...args: any[]): ClassDecorator {
//     throw new Error('Current decorator not implemented!')
//   }
//
//   decoratorProxy = (...args: any[]): ClassDecorator | PropertyDecorator => {
//     const fieldDecorator = this.fieldDecorator(...args);
//     const resourceDecorator = this.resourceDecorator(...args);
//
//     return function (target, propertyKey) {
//       if (propertyKey) {
//         fieldDecorator(target, propertyKey)
//       } else {
//         resourceDecorator(<new () => unknown>target)
//       }
//     }
//   };
//
//   toConfig() {
//     return {
//       ...this.default,
//     }
//   }
// }
//
// export default Plugin;
//
//
// class OAuthPlugin extends Plugin {
//
//   default = {};
//
//   fieldDecorator(data: object): PropertyDecorator {
//     return (target, propertyKey) => {
//       Reflect.defineMetadata(fieldPlugin, data, target, propertyKey)
//     }
//   }
//
//   resourceDecorator(data: object): ClassDecorator {
//     return (target) => {
//       Reflect.defineMetadata(resourcePlugin, data, target)
//     }
//   }
// }
//
//
// const oauthPlugin = new OAuthPlugin();
//
// const oauth = oauthPlugin.decoratorProxy;
